<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script type="text/javascript">

    function object(O) {
        function Fun() {}
        // 将传入的对象做为Fun的原型
        Fun.prototype = O
        return new Fun()
    }

    function inheritPrototype(subType, superType) {
        // 将超类的原型传入，object返回的对象的原型就是超累的原型
        var prototype = object(superType.prototype)
        // 弥补因重写原型而市区默认的constructor属性
        prototype.constructor = subType
        subType.prototype = prototype
    }



    function SuperType(name) {
        this.name = name
        this.colors = ['red', 'orange', 'yellow']
    }
    SuperType.prototype.sayName = function () {
        console.log(this.name)
    }
    function SubType(name, age) {
        // ①pe执行环境，使name，colors做为SubType的属性
        SuperType.call(this, name)
        // ②为SubType添加属性
        this.age = age
    }
    inheritPrototype(SubType, SuperType)
    SubType.prototype.sayAge = function () {
        console.log(this.age)
    }
    var instance = new SubType('tom', 10)
    console.log(instance)
    /*
    {
        name: "tom",        SubType中的属性（对应①）
        colors: Array(3),   与name同理
        age: 10             SubType的属性（对应②）
        sayAge              SubType原型的方法
        sayName             继承自SuperType原型的方法
    }
    */

</script>

</body>
</html>
